home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / trial / demon / TURNPIKE.1 / CLASSES.ZIP / sun / NET / WWW / HTTP / HttpClient.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-04-14  |  7.0 KB  |  355 lines

  1. package sun.net.www.http;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.DataInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import java.net.InetAddress;
  10. import java.net.SocketException;
  11. import java.net.URL;
  12. import java.net.UnknownHostException;
  13. import java.util.StringTokenizer;
  14. import sun.net.NetworkClient;
  15. import sun.net.TelnetInputStream;
  16. import sun.net.www.MessageHeader;
  17.  
  18. public final class HttpClient extends NetworkClient {
  19.    static final boolean debug = false;
  20.    static final String userAgentString = "User-Agent: " + System.getProperty("http.agent", "Java" + System.getProperty("java.version")) + "\r\n";
  21.    static final String acceptString = "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n";
  22.    static final int httpPortNumber = 80;
  23.    public static boolean useProxyForFirewall = Boolean.getBoolean("firewallSet");
  24.    public static String firewallProxyHost = System.getProperty("firewallHost");
  25.    public static int firewallProxyPort = Integer.getInteger("firewallPort", 80);
  26.    public static boolean useProxyForCaching = Boolean.getBoolean("proxySet");
  27.    public static String cachingProxyHost = System.getProperty("proxyHost", "sunweb.ebay");
  28.    public static int cachingProxyPort = Integer.getInteger("proxyPort", 80);
  29.    private String proxy;
  30.    private int proxyPort;
  31.    // $FF: renamed from: OK int
  32.    public static final int field_0 = 200;
  33.    public static final int CREATED = 201;
  34.    public static final int ACCEPTED = 202;
  35.    public static final int PARTIAL = 203;
  36.    public static final int MOVED = 301;
  37.    public static final int FOUND = 302;
  38.    public static final int METHOD = 303;
  39.    public static final int BAD = 400;
  40.    public static final int UNAUTHORIZED = 401;
  41.    public static final int PAYMENT_REQUIRED = 402;
  42.    public static final int FORBIDDEN = 403;
  43.    public static final int NOT_FOUND = 404;
  44.    public static final int INTERNAL_ERROR = 500;
  45.    public static final int NOT_IMPLEMENTED = 501;
  46.    int status;
  47.    MessageHeader mimeHeader;
  48.    boolean usingProxy;
  49.    String host;
  50.    String authentication;
  51.    URL url;
  52.  
  53.    public synchronized void openServer(String var1, int var2) throws UnauthorizedHttpRequestException, UnknownHostException, SocketException, IOException {
  54.       this.host = var1;
  55.       boolean var3 = false;
  56.       SecurityManager var4 = System.getSecurityManager();
  57.       if (var4 != null) {
  58.          var4.checkConnect(var1, var2);
  59.       }
  60.  
  61.       if (this.url.getProtocol().equals("http")) {
  62.          if (useProxyForCaching) {
  63.             super.openServer(cachingProxyHost, cachingProxyPort);
  64.             this.usingProxy = true;
  65.             return;
  66.          }
  67.  
  68.          try {
  69.             super.openServer(var1, var2);
  70.          } catch (UnknownHostException var6) {
  71.             if (!useProxyForFirewall) {
  72.                throw var6;
  73.             }
  74.  
  75.             if (this.proxy == null) {
  76.                super.openServer(firewallProxyHost, firewallProxyPort);
  77.             } else {
  78.                super.openServer(this.proxy, this.proxyPort);
  79.             }
  80.  
  81.             this.usingProxy = true;
  82.          } catch (SocketException var7) {
  83.             if (!useProxyForFirewall) {
  84.                throw var7;
  85.             }
  86.  
  87.             if (this.proxy == null) {
  88.                super.openServer(firewallProxyHost, firewallProxyPort);
  89.             } else {
  90.                super.openServer(this.proxy, this.proxyPort);
  91.             }
  92.  
  93.             this.usingProxy = true;
  94.          }
  95.       } else {
  96.          if (this.proxy == null) {
  97.             super.openServer(firewallProxyHost, firewallProxyPort);
  98.          } else {
  99.             super.openServer(this.proxy, this.proxyPort);
  100.          }
  101.  
  102.          this.usingProxy = true;
  103.       }
  104.  
  105.       var3 = true;
  106.    }
  107.  
  108.    protected void getRequestStatus(String var1, String var2) throws UnauthorizedHttpRequestException, FileNotFoundException {
  109.       if (!var1.startsWith("HTTP/1.0 ") && !var1.startsWith("HTTP/1.1 ")) {
  110.          this.status = -1;
  111.       } else {
  112.          this.status = Integer.parseInt(var1.substring(9, 12));
  113.       }
  114.  
  115.       switch (this.status) {
  116.          case 400:
  117.          case 402:
  118.          case 403:
  119.          case 404:
  120.          case 500:
  121.          case 501:
  122.             throw new FileNotFoundException(var1 + " -- " + var2);
  123.          case 401:
  124.             System.err.println("HTTPClient: Throwing UnauthorizedHttpRequestException");
  125.             throw new UnauthorizedHttpRequestException(this.url, this);
  126.          default:
  127.       }
  128.    }
  129.  
  130.    public String getURLFile(URL var1) {
  131.       if (this.usingProxy) {
  132.          String var2 = var1.getProtocol() + "://" + var1.getHost();
  133.          if (var1.getPort() != -1) {
  134.             var2 = var2 + ":" + var1.getPort();
  135.          }
  136.  
  137.          return var2 + var1.getFile();
  138.       } else {
  139.          return var1.getFile();
  140.       }
  141.    }
  142.  
  143.    public void processRequest(String var1) throws UnauthorizedHttpRequestException, IOException {
  144.       BufferedInputStream var2 = (BufferedInputStream)super.serverInput;
  145.       String var3 = null;
  146.       String var4 = null;
  147.       var2.mark(200);
  148.       DataInputStream var5 = new DataInputStream(new TelnetInputStream(super.serverInput, false));
  149.  
  150.       while(true) {
  151.          String var6 = var5.readLine();
  152.          if (var4 == null) {
  153.             if (var6 == null) {
  154.                throw new SocketException("Unexpected EOF");
  155.             }
  156.  
  157.             var4 = new String(var6);
  158.          }
  159.  
  160.          if (var6 == null || var6.length() == 0) {
  161.             break;
  162.          }
  163.  
  164.          if (var6.startsWith("HTTP/1.0") || var6.startsWith("HTTP/1.1")) {
  165.             var3 = new String(var6);
  166.             if (!var4.startsWith("HTTP/1.0") && !var4.startsWith("HTTP/1.1")) {
  167.                System.err.println("Warning: The first line from " + this.url + " was not HTTP/1.0 compliant.");
  168.                System.err.println("         '" + var4 + "'");
  169.             }
  170.             break;
  171.          }
  172.       }
  173.  
  174.       var2.reset();
  175.  
  176.       try {
  177.          if (var3 != null) {
  178.             try {
  179.                this.getRequestStatus(var3, var1);
  180.             } finally {
  181.                this.mimeHeader = new MessageHeader(super.serverInput);
  182.             }
  183.  
  184.             return;
  185.          }
  186.  
  187.          if (var4 == null || var4.length() == 0) {
  188.             throw new SocketException("Unexpected EOF");
  189.          }
  190.  
  191.          if (var4.indexOf("hostname unknown") != -1) {
  192.             throw new UnknownHostException(this.host);
  193.          }
  194.  
  195.          if (var4.indexOf("refused") != -1 || var4.startsWith("</BODY>")) {
  196.             throw new SocketException("Connection refused");
  197.          }
  198.       } catch (UnauthorizedHttpRequestException var15) {
  199.          throw var15;
  200.       } catch (Exception var16) {
  201.          String var7 = this.mimeHeader != null ? this.mimeHeader.findValue("content-length") : null;
  202.          boolean var8 = false;
  203.          if (var7 == null || Integer.parseInt(var7) == 0) {
  204.             try {
  205.                this.closeServer();
  206.             } catch (Throwable var13) {
  207.             }
  208.  
  209.             throw var16 instanceof IOException ? (IOException)var16 : new IOException(((Throwable)var16).toString());
  210.          }
  211.       }
  212.  
  213.    }
  214.  
  215.    public void closeServer() {
  216.       if (this.url != null) {
  217.          this.url = null;
  218.       }
  219.  
  220.       try {
  221.          super.closeServer();
  222.       } catch (Throwable var1) {
  223.       }
  224.    }
  225.  
  226.    public MessageHeader getMimeHeader() {
  227.       return this.mimeHeader;
  228.    }
  229.  
  230.    public String getHeaderField(String var1) {
  231.       return this.mimeHeader != null ? this.mimeHeader.findValue(var1) : null;
  232.    }
  233.  
  234.    public int getStatus() {
  235.       return this.status;
  236.    }
  237.  
  238.    public InputStream getInputStream() {
  239.       return super.serverInput;
  240.    }
  241.  
  242.    public OutputStream getOutputStream() {
  243.       return super.serverOutput;
  244.    }
  245.  
  246.    public void setAuthentication(String var1) {
  247.       this.authentication = var1;
  248.    }
  249.  
  250.    public void setAuthentication(AuthenticationInfo var1) {
  251.       if (var1 == null) {
  252.          this.authentication = "";
  253.       } else {
  254.          this.authentication = var1.auth;
  255.       }
  256.    }
  257.  
  258.    public String getAuthentication() {
  259.       if (this.authentication == null) {
  260.          return "";
  261.       } else {
  262.          String var1 = "Authorization: " + this.authentication + "\r\n";
  263.          return var1;
  264.       }
  265.    }
  266.  
  267.    public String getAuthentication(URL var1) {
  268.       AuthenticationInfo var2 = AuthenticationInfo.getAuth(var1);
  269.       if (var2 == null) {
  270.          this.authentication = "";
  271.       } else {
  272.          this.authentication = var2.auth;
  273.       }
  274.  
  275.       return this.getAuthentication();
  276.    }
  277.  
  278.    public String getAuthenticationScheme() {
  279.       return this.getAuthenticationField(1);
  280.    }
  281.  
  282.    public String getAuthenticationRealm() {
  283.       return this.getAuthenticationField(3);
  284.    }
  285.  
  286.    public String getAuthenticationField(int var1) {
  287.       String var2 = this.mimeHeader != null ? this.mimeHeader.findValue("www-authenticate") : null;
  288.       if (var2 == null) {
  289.          return null;
  290.       } else {
  291.          StringTokenizer var3 = new StringTokenizer(var2, " =\"");
  292.  
  293.          while(true) {
  294.             --var1;
  295.             if (var1 <= 0) {
  296.                return var3.hasMoreTokens() ? var3.nextToken() : null;
  297.             }
  298.  
  299.             var3.nextToken();
  300.          }
  301.       }
  302.    }
  303.  
  304.    public HttpClient(URL var1, String var2, String var3, int var4) throws UnauthorizedHttpRequestException, IOException {
  305.       this.proxyPort = -1;
  306.       this.usingProxy = false;
  307.       this.proxy = var3;
  308.       this.proxyPort = var4;
  309.       this.authentication = var2;
  310.  
  311.       try {
  312.          InetAddress var5 = InetAddress.getByName(var1.getHost());
  313.          var1 = new URL(var1.getProtocol(), var5.getHostAddress(), var1.getPort(), var1.getFile());
  314.       } catch (UnknownHostException var6) {
  315.       }
  316.  
  317.       this.url = var1;
  318.       int var7 = var1.getPort();
  319.       if (var7 == -1) {
  320.          var7 = 80;
  321.       }
  322.  
  323.       this.openServer(var1.getHost(), var7);
  324.    }
  325.  
  326.    public HttpClient(URL var1, String var2, int var3) throws UnauthorizedHttpRequestException, IOException {
  327.       this.proxyPort = -1;
  328.       this.usingProxy = false;
  329.       this.proxy = var2;
  330.       this.proxyPort = var3;
  331.  
  332.       try {
  333.          InetAddress var4 = InetAddress.getByName(var1.getHost());
  334.          var1 = new URL(var1.getProtocol(), var4.getHostAddress(), var1.getPort(), var1.getFile());
  335.       } catch (UnknownHostException var5) {
  336.       }
  337.  
  338.       this.url = var1;
  339.       int var6 = var1.getPort();
  340.       if (var6 == -1) {
  341.          var6 = 80;
  342.       }
  343.  
  344.       this.openServer(var1.getHost(), var6);
  345.    }
  346.  
  347.    public HttpClient(URL var1, String var2) throws UnauthorizedHttpRequestException, IOException {
  348.       this(var1, var2, (String)null, -1);
  349.    }
  350.  
  351.    public HttpClient(URL var1) throws UnauthorizedHttpRequestException, IOException {
  352.       this(var1, (String)null, -1);
  353.    }
  354. }
  355.